home *** CD-ROM | disk | FTP | other *** search
- /*
- RequiredEventSupport.c
-
- */
-
- #include <AppleEvents.h>
-
- #include "RequiredEventSupport.h"
-
- /* Local Prototypes */
- pascal OSErr HandleOAPP(AppleEvent* theAppleEvent,AppleEvent* reply,ApplicationUPP openapp);
- pascal OSErr HandleODOC(AppleEvent* theAppleEvent,AppleEvent* reply,DocumentUPP opendoc);
- pascal OSErr HandlePDOC(AppleEvent* theAppleEvent,AppleEvent* reply,DocumentUPP printdoc);
- pascal OSErr HandleQUIT(AppleEvent* theAppleEvent,AppleEvent* reply,ApplicationUPP quitapp);
-
- OSErr GotRequiredParams(AppleEvent* theAppleEvent){
- DescType typeCode;
- Size actualSize;
- OSErr err;
-
- err=AEGetAttributePtr(theAppleEvent,keyMissedKeywordAttr,typeWildCard,&typeCode,(Ptr)0,0,&actualSize);
- // null ptr ok; we don't need the data, just AEGetAttributePtr's result
-
- if (err==errAEDescNotFound)
- err=noErr;
- else if (err==noErr)
- err=errAEEventNotHandled;
-
- return err;
- }
-
- pascal OSErr HandleOAPP(AppleEvent* theAppleEvent,AppleEvent* reply,ApplicationUPP openapp){
- OSErr err=errAEEventNotHandled;
-
- GotRequiredParams(theAppleEvent);
-
- if (openapp!=(ApplicationUPP)0)
- err=CallApplicationProc(openapp);
-
- return err;
- }
-
- pascal OSErr HandleODOC(AppleEvent* theAppleEvent,AppleEvent* reply,DocumentUPP opendoc){
- FSSpec myFSS;
- AEDescList docList;
- long index,itemsInList;
- Size actualSize;
- AEKeyword keywd;
- DescType typeCode;
- OSErr oe,ooe;
-
- if (opendoc==(DocumentUPP)0)
- return errAEEventNotHandled;
-
- oe=AEGetParamDesc(theAppleEvent,keyDirectObject,typeAEList,&docList);
- if (oe==noErr){
- GotRequiredParams(theAppleEvent);
- // now get each alias from the list (as an FSSpec) and open the associated file
- oe=AECountItems(&docList,&itemsInList);
- for (index=1;index<=itemsInList;index++){
- ooe=AEGetNthPtr(&docList,index,typeFSS,&keywd,&typeCode,&myFSS,sizeof(FSSpec),&actualSize);
- // coercion does alias->fsspec
- if (ooe==noErr)
- CallDocumentProc(opendoc,&myFSS);
- }
- AEDisposeDesc(&docList);
- }
-
- return oe;
- }
-
- pascal OSErr HandlePDOC(AppleEvent* theAppleEvent,AppleEvent* reply,DocumentUPP printdoc){
- FSSpec myFSS;
- AEDescList docList;
- long index,itemsInList;
- Size actualSize;
- AEKeyword keywd;
- DescType typeCode;
- OSErr oe,ooe;
-
- if (printdoc==(DocumentUPP)0)
- return errAEEventNotHandled;
-
- oe=AEGetParamDesc(theAppleEvent,keyDirectObject,typeAEList,&docList);
- if (oe==noErr){
- GotRequiredParams(theAppleEvent);
- // now get each alias from the list (as an FSSpec) and open the associated file
- oe=AECountItems(&docList,&itemsInList);
- for (index=1;index<=itemsInList;index++){
- ooe=AEGetNthPtr(&docList,index,typeFSS,&keywd,&typeCode,&myFSS,sizeof(FSSpec),&actualSize);
- // coercion does alias->fsspec
- if (ooe==noErr)
- CallDocumentProc(printdoc,&myFSS);
- }
- AEDisposeDesc(&docList);
- }
-
- return oe;
- }
-
- pascal OSErr HandleQUIT(AppleEvent* theAppleEvent,AppleEvent* reply,ApplicationUPP quitapp){
- OSErr oe;
- Str255 errStr="\puser canceled quit";
- Str255 okStr="\pOK";
- StringPtr sp;
-
- if (quitapp==(ApplicationUPP)0)
- return errAEEventNotHandled;
-
- GotRequiredParams(theAppleEvent);
-
- oe=CallApplicationProc(quitapp);
-
- if (reply->dataHandle!=(Handle)0){
- if (oe==noErr)
- sp=okStr;
- else
- sp=errStr;
-
- oe=AEPutParamPtr(reply,keyErrorString,typeChar,(Ptr)&(sp[1]),sp[0]);
- }
-
- return oe;
- }
-
- AEEventHandlerUPP _gOAppUPP,_gODocUPP,_gPDocUPP,_gQuitUPP;
-
- OSErr InitAppleEvents(ApplicationUPP openapp,DocumentUPP opendoc,DocumentUPP printdoc,ApplicationUPP quitapp){
- OSErr aevtErr;
-
- _gOAppUPP=NewAEEventHandlerProc(HandleOAPP);
- _gODocUPP=NewAEEventHandlerProc(HandleODOC);
- _gPDocUPP=NewAEEventHandlerProc(HandlePDOC);
- _gQuitUPP=NewAEEventHandlerProc(HandleQUIT);
-
- aevtErr=AEInstallEventHandler(kCoreEventClass,kAEOpenApplication,_gOAppUPP,(long)openapp,false);
-
- if (aevtErr==noErr)
- aevtErr=AEInstallEventHandler(kCoreEventClass,kAEOpenDocuments,_gODocUPP,(long)opendoc,false);
-
- if (aevtErr==noErr)
- aevtErr=AEInstallEventHandler(kCoreEventClass,kAEPrintDocuments,_gPDocUPP,(long)printdoc,false);
-
- if (aevtErr==noErr)
- aevtErr=AEInstallEventHandler(kCoreEventClass,kAEQuitApplication,_gQuitUPP,(long)quitapp,false);
-
- return aevtErr;
- }
-
-
-
-
-
-